import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '@/views/Home.vue'
import Login from '@/views/Login'
import main from '@/views/main/main'
import my from '@/views/my/my'
import question from '@/views/question/question'
import video from '@/views/video/video'
import TestSlot from '../test/TestSlot'
import search from '../views/search/search'
import sresult from '../views/search/sresult'
import detail from '../views/detail/detail'
import xiaozhi from '../views/xiaozhi/xiaozhi'
Vue.use(VueRouter)

// 配置路由映射时候 name属性可以给路由的路径起一个别名
// 跳转路由时候 可以使用name跳转 (相当于路径别名)
// this.$router.push('/about') = this.$router.push({name: 'About'})
const routes = [
  {
    path: '/',
    redirect: '/Login'
  },
  {
    path: '/home',
    name: 'home',
    component: Home,
    redirect: '/home/main',
    children: [
      { path: 'main', component: main, meta: { keepAlive: true, auth: true } },
      { path: 'my', component: my },
      { path: 'question', component: question },
      { path: 'video', component: video }
    ]
  },
  {
    path: '/Login',
    name: 'Login',
    component: Login
  },
  {
    path: '/slot',
    component: TestSlot
  },
  {
    path: '/search',
    component: search
  },
  {
    path: '/sresult',
    name: 'myresult',
    component: sresult
  },
  {
    path: '/detail',
    component: detail
  },
  {
    path: '/user/chat',
    component: xiaozhi
  }
]

const router = new VueRouter({
  routes
})
// 设置全局导航守卫(路由跳转到目标组件之前 先经过导航守卫进行效验)
// 判断其token值 如果不存在 转到登录页面 如果已经在登录页面 则判断不需要跳转
router.beforeEach((to, from, next) => {
  // ~ 白名单功能
  if (to.meta.auth) {
    return next()
  }
  // to 表示要跳转到哪里去
  // from 表示从哪里跳转过来的
  // next 表示具体跳转到哪里 如果不调用 无法看到组件

  // 判断用户是否已经登录
  // 1. 查询用户是否已经登录 把用户token值转换为字符串 (两个token 临时token 和 续费token)
  const userToken = JSON.parse(sessionStorage.getItem('mytoken'))
  // 2. 获取字符串整合token 和 两个token的值 (两个token 临时token 和 续费token)
  const flag = userToken && userToken.token && userToken.refresh_token// 判断是否存在token值 存在返回true
  // 3. 进行token判断 是否存在token 和 是否处于登录页 to.path是判断是否处于某个页面
  if (!flag && to.path !== '/Login') {
    // 4. 如果没登录 进入判断进行跳转
    next('/Login')
  } else {
    // 5. 如果已经登录 直接next()即可
    next()
  }
})
export default router
